 /** 
 * @addtogroup nmea
 * nmea
 * @brief        工具
 * @{
 */
/**
 * @file         nmea_utils.h
 * @brief        工具
 * @note    
 * @author       lzl
 * @date         2020-07-27
 * @version      1.0
 *
 * @par          修改日志
 * <table>
 * <tr><th>Date        <th>Version               <th>Author          <th>Description
 * <tr><td>2020-07-27  <td>1.0                   <td>Akee            <td>增加文件注释
 * @copyright    杭州鸿泉物联网技术股份有限公司
 */
#ifndef _NMEA_UTILS_H_
#define _NMEA_UTILS_H_

#include <stddef.h>
#include <stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief 计算校验码
 * 
 * @param buf 待计算的内存缓冲区
 * @param len 缓存区长度
 * @return 校验码
 */
unsigned char NmeaCheckSum(unsigned char *buf, size_t len);

/**
 * @brief NMEA语句格式化
 * 
 * 格式化NMEA语句后计算校验码并附加在buffer尾部,所以fmt参数不应该包含*和回车换行符
 * 
 * @param buffer 格式化输出缓存区
 * @param bufsize 缓存区尺寸
 * @param fmt 格式化字符串, 以 <$> or <!>开始, 但是不能以*和回车换行符结束
 * @param ... 
 * @return size_t 格式化后字符串长度
 * 
 * @example
 * NmeaFormat(buffer, 32, "$GPGST,%d,%d,%x", )
 */
size_t NmeaFormat(char *buffer, size_t bufsize, const char *fmt, ...);

/**
 * @brief 十六进制的Ascii转换为Int类型
 * @param p: 需要转换字符串开始位置
 * @param end 需要转换字符串结束位置
 * @param is_success: 转换是否成功，true: 成功; false: 失败
 * @return 转换后的数字，如果失败，则返回-1
 */
int NmeaHexStrToInt(const char *p, const char *end, bool *is_success);

#ifdef __cplusplus
}
#endif

#endif

/**
 * @} 
 */
